package by2019;

import java.util.Arrays;
import java.util.HashMap;

/*
 * 给定两个字符串，判断两个字符串的字母是否相同，
 * 字母顺序可以不同
 */
public class 有效的字母异位词 {

	public static void main(String[] args) {
		String s = "hello" ;
		String t = "ohell" ;
    	
		System.out.println(isAnagramPro(s, t) );
		
	}
	
	//排序实现
    public static boolean isAnagram(String s, String t) {
    	char[] sc = s.toCharArray() ;
    	char[] tc = t.toCharArray() ;
        Arrays.sort(sc);
        Arrays.sort(tc);

        boolean tem = Arrays.equals(sc, tc) ;
        
        return tem ;
    }
    
    //利用map实现
    //将s的字符和出现次数存入map中，t在map中的对应字符处减少次数，判断map是否为空
    //以下代码有bug并且没有解决
    public static boolean isAnagramPro(String s, String t) {
    	
    	if(s.length()!=t.length())
    		return false ;
    	
    	HashMap<Character, Integer> hm = new HashMap<Character, Integer>() ;
    	
    	for(int i=0; i<s.length(); i++) {
    		if(hm.get(s.charAt(i))==null) {
    			int count = hm.get(s.charAt(i))  ;
    			count ++ ;
    			hm.put(s.charAt(i), count) ;
    		} else {
    			hm.put(s.charAt(i), 1) ;
    		}
    		
    		int count = hm.get(t.charAt(i))  ;
			count -- ;
			hm.put(s.charAt(i), count) ;
    	}
    	
    	for(int i=0; i<t.length(); i++) {
    		if(hm.get(s.charAt(i))!=0)
    			return false ;
    	}
    	
    	return true ;
    	
    }

}
